package br.com.imob.dao;

import br.com.imob.modelo.Finalidade;

import java.util.List;

/**
 *
 * @author Gilton Nascimento
 */
public class FinalidadeDao extends GenericDao {

    public FinalidadeDao() { }

    public Integer adicionarFinalidade(Finalidade finalidade) {
//        new CategoriaDao().adicionarCategoria(finalidade.getCategoria());
    	
    	if ( finalidade.getCategoria().getCategoriaId() != null )
    		finalidade.setCategoria( new CategoriaDao().getCategoria( finalidade.getCategoria().getCategoriaId() ) );
    	if ( finalidade.getCategoria().getCategoria() != null )
    		finalidade.setCategoria( new CategoriaDao().getCategoriaQNamedCategoria( finalidade.getCategoria().getCategoria() ) );
    	
        saveOrUpdatePojo(finalidade);
        return finalidade.getFinalidadeId();
    }

    public void removerFinalidade(Finalidade finalidade) {
        removerPojo(finalidade);
    }

    /* Precisa definir o ID */
    public void atualizarFinalidade(Finalidade recupera) {
        saveOrUpdatePojo(recupera);
    }
    /* Precisa definir qual atribuito sera a chave a identificar
     * a tupla a ser alterada */

    public void atualizarFinalidade(Finalidade recuperar, Finalidade alterar) {
        recuperar = retriveFinalidade(recuperar);

        if (alterar.getFinalidade() != null) recuperar.setFinalidade(alterar.getFinalidade());

        saveOrUpdatePojo(recuperar);
    }

//	Artificio para Recuperar a Tupla de Finalidade
    protected Finalidade retriveFinalidade(Finalidade recuperar) {
        if (recuperar.getFinalidade() != null) {
            return getFinalidadeQNamedFinalidade(recuperar.getFinalidade());
        }
        if (recuperar.getFinalidadeId() != null) {
            return getFinalidade(recuperar.getFinalidadeId());
        }
        return recuperar;
    }

//	Consultas
    public Finalidade getFinalidade(Integer key) {
        return getPojoByID(Finalidade.class, key);
    }

    public Finalidade getFinalidadeByQuery(String query, Object... params) {
        return getPojoByQry(query, params);
    }

    public Finalidade getFinalidadeQNamedFinalidade(String fltrFinalidade) {
        return getPojoByQNamed("Finalidade.findByFinalidade", fltrFinalidade);
    }
    
    /*  LIKES */
//  Finalidade
    public List<Finalidade> getFinalidadesQNamedPRX(String fltrFinalidade) {
        return getListByQNamedPRX("Finaliade.findLikeByFinalidade", fltrFinalidade);
    }
    /* Fim dos Likes */
    
    public List<Finalidade> getFinalidades() {
        return (List<Finalidade>) getALL(Finalidade.class);
    }

    public List<Finalidade> getFinalidades(boolean fecharSessao) {
        setSessionClosed( fecharSessao );
        return (List<Finalidade>) getALL(Finalidade.class);
    }

    public List<Finalidade> getFinalidadesByQuery(String query, Object... params) {
        return getListByQry(query, params);
    }

}
